﻿
namespace ShoppingCart.WebSite.Cliente
{
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Linq;
    using System.Web.UI;
    using Business.Entity.Enums;
    using Business.Logic;
    using WebSite.Code;
    using SC = Business.Entity;

    public partial class Compras : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack) return;
            LoadPedidos();
        }

        protected void GvPedidosSelectedIndexChanged(object sender, EventArgs e)
        {
            var idPedido = Convert.ToInt32(gvPedidos.SelectedRow.Cells[1].Text);
            LoadPedido(idPedido);
        }

        private void LoadPedidos()
        {
            var pedidos = PedidoManager.Instancia.ListarPorIdCliente(IdCliente, (byte)Estado.Atendido);
            BindControl<SC.Pedido>.BindGrid(gvPedidos, pedidos);
            if (pedidos.Count != 0)
            {
                panDetalle.Visible = true;
                gvPedidos.SelectedIndex = 0;
                LoadPedido(pedidos.First().IdPedido);
            }
            else
            {
                panDetalle.Visible = false;
            }
        }

        private void LoadPedido(int idPedido)
        {
            var pedido = PedidoManager.Instancia.Obtener(idPedido);
            litDocumento.Text = pedido.NombreDocumento.ToUpper();
            BindControl<SC.DetallePedido>.BindGrid(gvDetalle, pedido.Detalle);

            if (pedido.Envio != null)
            {
                panEnvio.Visible = true;
                txtProvincia.Text = pedido.Envio.Distrito.Provincia.Nombre;
                txtDistrito.Text = pedido.Envio.Distrito.Nombre;
                txtDireccion.Text = pedido.Envio.Direccion;
                txtReferencias.Text = pedido.Envio.Comentario;
                txtFechaEnvio.Text = pedido.Envio.FechaEnvio.HasValue ? pedido.Envio.FechaEnvio.Value.ToString("dd/MM/yyyy") : string.Empty;
                txtEstado.Text = pedido.Envio.NombreEstado;
                CalcularMontos(pedido.Envio.Distrito.IdDistrito);
            }
            else
            {
                panEnvio.Visible = false;
                CalcularMontos(0);
            }
        }

        private void CalcularMontos(int idDistrito)
        {
            var distrito = DistritoManager.Instancia.Obtener(idDistrito);
            var detalle = (List<SC.DetallePedido>)gvDetalle.DataSource;
            var monto = detalle.Sum(p => p.Cantidad * p.Precio);
            var cantidad = detalle.Sum(p => p.Cantidad);

            litTotal.Text = detalle.Sum(d => d.Cantidad * d.Precio).ToString("C");

            if (distrito != null)
            {
                var envio = distrito.Flete * cantidad;
                var path = Server.MapPath(ConfigurationManager.AppSettings["Parametros"]);
                var parametros = ParametroManager.Instancia.Listar(path);

                litEnvio.Text = envio.ToString("C");
                monto += envio;

                if (parametros.Count == 3)
                {
                    var parametroA = parametros[0];
                    if (cantidad > parametroA.Cantidad)
                    {
                        var parametroB = parametros[1];
                        if (cantidad > parametroB.Cantidad)
                        {
                            var parametroC = parametros[2];
                            if (cantidad > parametroC.Cantidad)
                            {
                                monto = monto - parametroC.Descuento;
                                litDescuento.Text = parametroC.Descuento.ToString("C");
                                txtDescuentoEnvio.Text = "Por la compra mayor a " + parametroC.Cantidad + " productos su descuento es " + parametroC.Descuento.ToString("C");
                            }
                            else
                            {
                                monto = monto - parametroB.Descuento;
                                litDescuento.Text = parametroB.Descuento.ToString("C");
                                txtDescuentoEnvio.Text = "Por la compra mayor a " + parametroB.Cantidad + " productos su descuento es " + parametroB.Descuento.ToString("C");
                            }
                        }
                        else
                        {
                            monto = monto - parametroA.Descuento;
                            litDescuento.Text = parametroA.Descuento.ToString("C");
                            txtDescuentoEnvio.Text = "Por la compra mayor a " + parametroA.Cantidad + " productos su descuento es " + parametroA.Descuento.ToString("C");
                        }
                    }
                    else txtDescuentoEnvio.Text = "S/.0.00, la cantidad comprada no asciende a un descuento.";
                }
                else txtDescuentoEnvio.Text = "S/.0.00, la cantidad comprada no asciende a un descuento.";

            }
            else
            {
                litDescuento.Text = (0).ToString("C");
                litEnvio.Text = (0).ToString("C");
            }
            litTotalNeto.Text = monto.ToString("C");
        }
    }
}
